import http from '@/utils/request'
import type { PaginationCommon, PaginationRes } from '../common'

/**字典数据分页请示 */
export interface DictDataPaginationReq extends PaginationCommon {
  dictName: EnumDictName
  queryText: string
  isPagination: boolean
}

/**字典名称 */
export enum EnumDictName {
  性别字典 = 0,
  费别字典 = 1,
  科室字典 = 2,
  国籍字典 = 3,
  民族字典 = 4,
  员工字典 = 5,
  字典配置 = 6,
  挂号时间描述字典 = 7,
  途径字典 = 8,
  频次字典 = 9,
  价表项目分类字典 = 10,
  科室临床科室属性 = 11,
  科室门诊住院科室标志 = 12,
  科室内外科标志 = 13,
  挂号号签 = 14,
  挂号号类 = 15,
  挂号收费项目 = 16,
  挂号收费计算方式 = 17,
  患者主索引 = 18,
  当前价表 = 19,
  科室附加费 = 20,
}

/** 字典类型 */
export enum EnumDictType {
  基本表 = 0,
  视图 = 1,
}

/** 字典配置 */
export interface DictConfig {
  dictCode: EnumDictName | number
  dictName: string
  tableName: string
  createDate: Date
  dictType: EnumDictType
  editStatus: boolean
  createOperatorName?: string
  items: DictConfigItem[]
}

/** 字典配置(明细) */
export interface DictConfigItem {
  dictCode: number
  columnName: string
  displayName: string
  displayWidth: number
  editable: string
  easySearcher: boolean
  displaySort: number
}

/**保存数据 */
export interface SaveData<T> {
  dictName: EnumDictName
  data: {
    inserts: T[]
    removes: T[]
    updates: T[]
  }
}

/**科室属性 */
export interface DeptAtrrPublic {
  code: string
  name: string
}

/** 字典数据 */
export const DictAPIs = {
  /**获取数据(分页) */
  getDataByPagination<T>(data: DictDataPaginationReq) {
    return http.post<PaginationRes<T>>(`/sys/getDataByPagination`, data)
  },
  /**获取数据 */
  async getData<T>(dictName: EnumDictName | number) {
    return (await http.post<PaginationRes<T>>(`/sys/getDataByPagination`, { dictName, isPagination: false })).data
  },
  /**获取字典配置(单项) */
  async getDictConfig(dictName: EnumDictName | number) {
    return await http.get<DictConfig>(`/sys/getDictConfig`, { dictName })
  },
  /**删除字典配置 */
  async removeDictConfig(dictName: EnumDictName | number) {
    return await http.get<DictConfig>(`/sys/removeDictConfig`, { dictName })
  },
  /**重新加载字典配置*/
  reloadDictConfig() {
    return http.get<boolean>(`/sys/initDictConfig`)
  },
  /**保存数据*/
  saveData<T>(data: SaveData<T>) {
    return http.get<boolean>(`/sys/saveData`, data)
  },
}
